<?php

namespace app\admin\command;


use think\Config;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Exception;

// 引入数据库类
use think\Db;

//创建自定义命令
class Project extends Command
{
    protected $model = null;

    protected function configure()
    {
        $this
            ->setName('project')
            ->setDescription('自动执行活动的状态修改');
        //要执行的controller必须一样，不适用模糊查询
    }

    protected function execute(Input $input, Output $output)
    {
        // 先查询所有的活动列表
        $ProjectList=Db::name('project')->select();
        
        if(!$ProjectList)
        {
            $output->info('当前暂无活动，请等待后台添加');
            return false;
        }
        $onids = [];      //开始报名id
        $offids = [];     //截至报名id
        $startids = [];   //开始活动id
        $stopids = [];    //结束活动id

        // 更新活动项目表的状态，也要更新预约订单表的状态
        $startOids = [];   //开始活动id
        $stopOids = [];    //结束活动id

        // 循环按条件追加id
        foreach($ProjectList as $item)
        {
            // 开始报名,不需要查订单
            if($item['status']=='0')
            {
                // time() > 开始活动时间的10天前  createtime - 3600*24*10
                //提前10天 开始报名
                $createtime=$item['createtime'] - (3600*24*10);
                if(time() >= $createtime)
                {
                    // 修改数据
                    $onids[]=$item['id'];
                }
            }

            // 截至报名,不需要查订单
            if($item['status']=='1')
            {
                // time() > 开始活动时间的两天前  createtime - 3600*24*2
                //提前两天
                $createtime=$item['createtime'] - (3600*24*2);
                if(time() >= $createtime)
                {
                    // 修改数据
                    $offids[]=$item['id'];
                }
            }

            // 开始活动
            if($item['status']=='2')
            {
                $createtime=$item['createtime'];
                if(time() >= $createtime)
                {
                    // 修改数据
                    $startids[]=$item['id'];
                    // 查询订单
                    $where=[
                        'pid'=>$item['id']
                    ];
                    $OrderList=Db::name('project_order')->where($where)->column('id');

                    if($OrderList)
                    {
                        $startOids=$OrderList;
                    }
                }
            }

            // 结束活动
            if($item['status']=='3')
            {
                $endtime=$item['endtime'];
                if(time() >= $endtime)
                {
                    // 修改数据
                    $stopids[]=$item['id'];
                    // 查询订单
                    $where=[
                        'pid'=>$item['id']
                    ];
                    $OrderList=Db::name('project_order')->where($where)->column('id');

                    if($OrderList)
                    {
                        $stopOids=$OrderList;
                    }
                }
            }
        }

        // 开始报名
        if(empty($onids))
        {
            $output->info('目前没有可开始报名的活动');
        }else
        {
            $onResult=Db::name('project')->where(['id'=>['IN',$onids]])->update(['status'=>'1']);
            if($onResult === FALSE)
            {
                $output->error('开始报名失败');
            }else
            {
                $output->info("已开始报名 $onResult 个活动");
            }
        }

        // 截至报名
        if(empty($offids))
        {
            $output->info('目前没有可截至报名的活动');
        }else
        {
            $offResult=Db::name('project')->where(['id'=>['IN',$offids]])->update(['status'=>'2']);
            if($offResult === FALSE)
            {
                $output->error('截至报名失败');
            }else
            {
                $output->info("已截止报名 $offResult 个活动");
            }
        }

        // 开始活动
        if(empty($startids))
        {
            $output->info('目前没有可开始的活动');
        }else
        {
            $startResult=Db::name('project')->where(['id'=>['IN',$startids]])->update(['status'=>'3']);
            $startOResult=Db::name('project_order')->where(['id'=>['IN',$startOids]])->update(['status'=>'1']);
            if($startResult === FALSE || $startOResult === FALSE)
            {
                $output->error('开始活动失败');
            }else
            {
                $output->info("已开始 $startResult 个活动");
            }
            
        }

        // 结束活动
        if(empty($stopids))
        {
            $output->info('目前没有可结束的活动');
        }else
        {
            $stopResult=Db::name('project')->where(['id'=>['IN',$stopids]])->update(['status'=>'4']);
            $stopOResult=Db::name('project_order')->where(['id'=>['IN',$stopOids]])->update(['status'=>'2']);
            if($stopResult === FALSE || $stopOResult === FALSE)
            {
                $output->error('结束活动失败');
            }else
            {
                $output->info("已结束 $stopResult 个活动");
            }
        }
        return false;
    }
}
